2.1 RR (Round Robin)
RR算法是最簡(jiǎn)單最常用的一種算法,即輪詢調(diào)度
例子:有三個(gè)節(jié)點(diǎn)A、B、C
第一個(gè)用戶訪問(wèn)會(huì)被指派到節(jié)點(diǎn)A
第二個(gè)用戶訪問(wèn)會(huì)被指派到節(jié)點(diǎn)B
第三個(gè)用戶訪問(wèn)會(huì)被指派到節(jié)點(diǎn)C
第四個(gè)用戶訪問(wèn)繼續(xù)指派到節(jié)點(diǎn)A,輪詢分配訪問(wèn)請(qǐng)求實(shí)現(xiàn)負(fù)載均衡 效果
2.2 LC (Least Connections )
最小連接數(shù)算法,根據(jù)后端的節(jié)點(diǎn)連接數(shù)大小動(dòng)態(tài)分配前端請(qǐng)求
例子:有三個(gè)節(jié)點(diǎn)A、B、C,各節(jié)點(diǎn)的連接數(shù)分別為A:4、B:5、C:6
第一個(gè)用戶連接請(qǐng)求,會(huì)被指派到A上,連接數(shù)變?yōu)锳:5、B:5、C:6
第二個(gè)用戶請(qǐng)求會(huì)繼續(xù)分配到A上,連接數(shù)變?yōu)锳:6、B:5、C:6; 再有新的請(qǐng)求會(huì)分配給B,每次將新的請(qǐng)求指派給連接數(shù)最小的客戶端
由于實(shí)際情況下A、B、C的連接數(shù)會(huì)動(dòng)態(tài)釋放,很難會(huì)出現(xiàn)一樣連接數(shù)的情況
此算法相比較rr算法有很大改進(jìn),是目前用到比較多的一種算法
2.3 SH (Source Hashing)
基于來(lái)源訪問(wèn)調(diào)度算法,用于一些有session會(huì)話記錄在服務(wù)器端的場(chǎng)景, 可以基于來(lái)源的IP、Cookie等做集群調(diào)度
例子:有三個(gè)節(jié)點(diǎn)A、B、C,第一個(gè)用戶第一次訪問(wèn)被指派到了A,第二個(gè)用戶第一次,訪問(wèn)被指派到了B
當(dāng)?shù)谝粋€(gè)用戶第二次訪問(wèn)時(shí)會(huì)被繼續(xù)指派到A,第二個(gè)用戶第二次訪問(wèn)時(shí)依舊會(huì)被指派到B,只要負(fù)載均衡調(diào)度器不重啟,第一個(gè)用戶訪問(wèn)都會(huì)被指派到A,第二個(gè)用戶訪問(wèn)都會(huì)被指派到B,實(shí)現(xiàn)集群的調(diào)度
此調(diào)度算法好處是實(shí)現(xiàn)會(huì)話保持,但某些IP訪問(wèn)量非常大時(shí)會(huì)引|起負(fù)載不均衡,部分節(jié)點(diǎn)訪問(wèn)量超大,影響業(yè)務(wù)使用
3 LVS、Nginx、HAproxy的優(yōu)缺點(diǎn)及其區(qū)別
3.1 Nginx的優(yōu)點(diǎn)
? ? 工作在網(wǎng)絡(luò)的7層之上,可以針對(duì)http應(yīng)用做一些分流的策略,比如針對(duì)域名、目錄結(jié)構(gòu)。Nginx正則規(guī)則比HAProxy更為強(qiáng)大和靈活。
? ? Nginx對(duì)網(wǎng)絡(luò)穩(wěn)定性的依賴非常小,理論上能ping通就就能進(jìn)行負(fù)載功能,LVS對(duì)網(wǎng)絡(luò)穩(wěn)定性依賴比較大,穩(wěn)定要求相對(duì)更高。
? ? Nginx安裝和配置、測(cè)試比較簡(jiǎn)單、方便,有清晰的日志用于排查和管理,LVS的配置、測(cè)試就要花比較長(zhǎng)的時(shí)間了。
? ? 可以承擔(dān)高負(fù)載壓力且穩(wěn)定,一般能支撐幾萬(wàn)次的并發(fā)量,負(fù)載度比IVS相對(duì)小些。
? ? Nginx可以通過(guò)端口檢測(cè)到服務(wù)器內(nèi)部的故障,比如根據(jù)服務(wù)器處理網(wǎng)頁(yè)返回的狀態(tài)碼、超時(shí)等等。
? ? Nginx不僅僅是一款優(yōu)秀的負(fù)載均衡器/反向代理軟件,它同時(shí)也是功能強(qiáng)大的Web應(yīng)用服務(wù)器。
? ? Nginx作為web反向加速緩存越來(lái)越成熟了,速度比傳統(tǒng)的Squid服務(wù)器更快,很多場(chǎng)景下都將其作為反向代理加速器。
? ? Nginx作為靜態(tài)網(wǎng)頁(yè)和圖片服務(wù)器,這方面的性能非常優(yōu)秀,同時(shí)第3方模塊也很多。
3.2 Nginx的缺點(diǎn)
缺點(diǎn):
? ? Nginx僅能支持http、https 和Email協(xié)議,這樣就在適用范圍上面小些。
? ? 對(duì)后端服務(wù)器的健康檢查,只支持通過(guò)端口來(lái)檢測(cè),不支持通過(guò)url來(lái)檢測(cè)。
? ? 不支持Session的直接保持,需要通過(guò)ip_hash和cookie的引導(dǎo)來(lái)解決。
3.3 LVS的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
? ? 抗負(fù)載能力強(qiáng)、是工作在網(wǎng)絡(luò)4層之上僅作分發(fā)之用,沒(méi)有流量的產(chǎn)生。因此負(fù)載均衡軟件里的性能最強(qiáng)的,對(duì)內(nèi)存和cpu資源消耗比較低。
? ? LVS工作穩(wěn)定,因?yàn)槠浔旧砜关?fù)載能力很強(qiáng),自身有完整的雙機(jī)熱備方案。
? ? 無(wú)流量,LVS只分發(fā)請(qǐng)求,而流量并不從它本身出去,這點(diǎn)保證了均衡器IO的性能不會(huì)受到大流量的影響。
? ? 應(yīng)用范圍較廣,因?yàn)長(zhǎng)VS工作在4層,所以它幾乎可對(duì)所有應(yīng)用做負(fù)載均衡,包括http、數(shù)據(jù)庫(kù)等。
缺點(diǎn):
? ? 軟件本身不支持正則表達(dá)式處理,不能做動(dòng)靜分離。相對(duì)來(lái)說(shuō),Nginx/HAProxy + Keepalived則具有明顯的優(yōu)勢(shì)。
? ? 如果是網(wǎng)站應(yīng)用比較龐大的話,LVS/ DR+Keepalived實(shí)施起來(lái)就比較復(fù)雜了。相對(duì)來(lái)說(shuō),Nginx/ HAProxy+Keepalived就簡(jiǎn)單多了。
3.4 HAProxy的優(yōu)點(diǎn)
? ? HAProxy也是支持虛擬主機(jī)的。
? ? HAProxy支持8種負(fù)載均衡策略。
? ? HAProxy的優(yōu)點(diǎn)能夠補(bǔ)充Nginx的一些缺點(diǎn),比如支持session的保持,cookie的引導(dǎo),同時(shí)支持通過(guò)獲取指定的url來(lái)檢測(cè)后端服務(wù)器的狀態(tài)。
? ? HAProxy跟LVS類似,本身就只是一款負(fù)載均衡軟件,單純從效率上來(lái)講HAProxy會(huì)比Nginx有更出色的負(fù)載均衡速度,在并發(fā)處理上也是優(yōu)于Nginx的。
? ? HAProxy支持TCP協(xié)議的負(fù)載均衡轉(zhuǎn)發(fā)。
3.5 LVS、Nginx、HAproxy的區(qū)別
? ? LVS基于Linux操作系統(tǒng)內(nèi)核實(shí)現(xiàn)軟負(fù)載均衡,而HAP roxy和Nginx是基于第三方應(yīng)用實(shí)現(xiàn)的軟負(fù)載均衡
? ? LVS是可實(shí)現(xiàn)4層的IP負(fù)載均衡技術(shù),無(wú)法實(shí)現(xiàn)基于目錄、URL的轉(zhuǎn)發(fā)。而HAProxy 和Nginx都可以實(shí)現(xiàn)4層和7層技術(shù),HAProxy 可提供TCP和HTTP應(yīng)用的負(fù)載均衡綜合解決方案
? ? LVS因?yàn)楣ぷ髟贗SO模型的第四層,其狀態(tài)監(jiān)測(cè)功能單一,而HAProxy在狀態(tài)監(jiān)測(cè)方面功能更豐富、強(qiáng)大,可支持端口、URI、腳本等多種狀態(tài)檢測(cè)方式
? ? HAProxy功能強(qiáng)大,單純從效率上來(lái)講HAProxy會(huì)比Nginx有更出色的負(fù)載均衡速度,在并發(fā)處理上也是優(yōu)于Nginx的。但整體性能低于4層模式的LVS負(fù)載均衡
? ? Nginx主要用于web服務(wù)器或緩存服務(wù)器。Nginx的upstream模 塊雖然也支持群集功能,但是對(duì)群集節(jié)點(diǎn)健康檢查功能不強(qiáng),性能沒(méi)有Haproxy好。